﻿#pragma once

#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8") // 强制utf8
#endif

#include <QDebug>
#include <QFrame>
#include <mutex>
#include <memory>
#include <iostream>
#include <QThread>
#include <functional>
#include <QDateTime>
#include <QUuid>
#include <QApplication>

// 单例模板类
template <typename T>
class Singleton {
protected:
	Singleton() = default;
	Singleton(const Singleton<T>&) = delete;
	Singleton& operator=(const Singleton<T>& st) = delete;

	static std::shared_ptr<T> _instance;
public:
	static std::shared_ptr<T> GetInstance() {
		static std::once_flag s_flag;
		std::call_once(s_flag, [&]() {
			_instance = std::shared_ptr<T>(new T);
			});

		return _instance;
	}
	void PrintAddress() {
		std::cout << _instance.get() << std::endl;
	}
	~Singleton() {
		std::cout << "this is singleton destruct" << std::endl;
	}
};

template <typename T>
std::shared_ptr<T> Singleton<T>::_instance = nullptr;


//// 文件信息模型（对应file_info表）
//struct FileInfo {
//	QUuid fileId;          // 唯一标识（UUID）
//	QString fileName;      // 文件名（如"test.txt"）
//	QString filePath;      // 文件完整路径（如"/home/user/test.txt"）
//	QDateTime lastModify;  // 最后修改时间
//};
//
//// 标签模型（对应label_item表）
//struct LabelItemData {
//	QUuid labelId;         // 标签唯一标识
//	QUuid fileId;          // 关联的文件ID
//	QString labelName;     // 标签名称
//	int rowNumber;         // 关联的行号
//};
//
//// 最近访问模型（对应recent_item表）
//struct RecentItemData {
//	QUuid recentId;        // 最近记录ID
//	QUuid fileId;          // 关联的文件ID
//	QDateTime accessTime;  // 访问时间（用于排序）
//};

// 换行符类型枚举
enum class LineEnding {
	CRLF,  // Windows: \r\n
	LF,    // Unix/Linux/Mac: \n
	CR     // 旧Mac: \r
};

// 内容搜索类型枚举
enum class FindMode {
	CurrentItem, // 当前文件
	AllRecentItems     // 所有最近文件
};
Q_DECLARE_METATYPE(FindMode)
